package com.szh.library.book.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.szh.model.Book;
import com.szh.model.User;
import com.szh.vo.BookFindVo;
import com.szh.vo.BookSaveVo;
import com.szh.vo.BookUpdateVo;
import com.szh.vo.UserSelectVo;

import java.util.List;

/**
 * @author: SongZiHao
 * @date: 2023/5/10
 */
public interface BookService extends IService<Book> {
    /**
     * 根据id查询图书
     * @param id 图书id
     * @return Book
     */
    Book findBookById(Long id);

    /**
     * 查询所有图书
     * @return List<Book>
     */
    List<Book> findAllBooks();

    /**
     * 条件查询图书，带分页
     * @param page 页码
     * @param limit 每页记录数
     * @param bookFindVo 查询条件vo类
     * @return Page<Book>
     */
    Page<Book> findBooksByConditionPage(Long page, Long limit, BookFindVo bookFindVo);

    /**
     * 保存图书
     * @param bookSaveVo 图书保存vo类
     * @return 是否保存成功
     */
    boolean saveBook(BookSaveVo bookSaveVo);

    /**
     * 根据id修改图书
     * @param bookUpdateVo 图书修改vo类
     * @return 是否修改成功
     */
    boolean updateBook(BookUpdateVo bookUpdateVo);

    /**
     * 根据id删除图书
     * @param id 图书id
     * @return 是否删除成功
     */
    boolean deleteBookById(Long id);

    /**
     * 批量删除图书
     * @param bookIds 待删图书id集合
     * @return 是否批量删除成功
     */
    boolean deleteBatchByIds(List<Long> bookIds);

    /**
     * 远程接口调用：根据id查询用户
     * @param id 用户id
     * @return User
     */
    User openFeignSelectUserById(Long id);

    /**
     * 远程接口调用：查询所有用户
     * @return List<User> 用户列表
     */
    List<User> openFeignSelectAllUsers();

    /**
     * 远程接口调用：条件查询用户，带分页
     * @param page 页码
     * @param limit 每页记录数
     * @param userSelectVo 查询条件
     * @return Page<User>
     */
    Page<User> openFeignSelectUsersByConditionPage(Long page, Long limit, UserSelectVo userSelectVo);
}
